import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression  # 线性回归模型
import matplotlib.ticker as ticker    # 自定义坐标轴格式
import matplotlib.dates as mdates     # 日期格式化
import matplotlib                    # 修改全局绘图设置
matplotlib.rcParams['font.family'] = 'SimHei'  # 中文字体

# 读取数据
df = pd.read_csv('data_100.csv', encoding='utf-8')
df['开奖日期'] = pd.to_datetime(df['开奖日期'])
df = df.sort_values('开奖日期')
df['销售额'] = pd.to_numeric(df['销售额'], errors='coerce')
df.dropna(subset=['销售额'], inplace=True)

# 构建时间特征
df['日期数字'] = df['开奖日期'].map(lambda d: (d - pd.Timestamp("2025-01-01")).days)
X = df[['日期数字']]
y = df['销售额']

# 训练模型
model = LinearRegression()
model.fit(X, y)

# 预测 2025-07-02 的销售额
target_date = pd.to_datetime('2025-07-02')
target_day = (target_date - pd.Timestamp("2025-01-01")).days
predicted_sale = model.predict([[target_day]])[0]
print(f"预测 2025-07-02 的销售额为：{predicted_sale:,.0f} 元")



# 可视化趋势 + 预测点
plt.figure(figsize=(12,6))
plt.plot(df['开奖日期'], df['销售额'], label='历史销售额', marker='o', color='blue')

# 添加预测点
plt.scatter([target_date], [predicted_sale], color='red', label='预测 7月2日', zorder=5)

# 设置横轴为年月日格式
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.gca().xaxis.set_major_locator(mdates.WeekdayLocator(interval=1))
plt.xticks(rotation=45)

# 设置纵轴为普通数字格式
plt.gca().yaxis.set_major_formatter(ticker.FuncFormatter(lambda x, _: f'{int(x):,}'))

plt.title('大乐透销售额趋势图（含预测）')
plt.xlabel('开奖日期')
plt.ylabel('销售额（元）')
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
